GoogleのJPEGエンコーダーGuetzliを試してみた
はじめに
AWSチームのすずきです。
GoogleがOSSとして公開しているJPEGエンコーダーの「Guetzli」。 従来のJPEG変換ツールと比較し、画質を保ちつつ35%のファイルサイズを抑制できると謳われています。
今回Ec2環境(Amazon Linux)上で、「Guetzli」と「ImageMagick」によるJPEGファイルの最適化を実施し、比較を行う機会がありましたので紹介させていただきます。
- GitHub - google/guetzli
- Announcing Guetzli: A New Open Source JPEG Encoder
- GoogleがJPEGエンコーダー「Guetzli」をオープンソースで公開
準備
Ec2
- OS: Amazon Linux 201707
- amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
- インスタンスタイプ: c3.large
guetzli
- 公式サイト で配布されている、linux_x86-64用バイナリを利用しました。
sudo curl -L -o /usr/local/bin/guetzli_linux_x86-64 https://github.com/google/guetzli/releases/download/v1.0.1/guetzli_linux_x86-64 sudo chmod 755 /usr/local/bin/guetzli_linux_x86-64
ImageMagick
- AmazonLinux標準リポジトリより、ImageMagickパッケージをインストールしました。
sudo yum install ImageMagick
- ImageMagickのバージョンは6.7.8でした
$ convert --version Version: ImageMagick 6.7.8-9 2016-06-22 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC Features: OpenMP
処理画像
- 2017年8月 「めそ子」壁紙(1920x1024)のPSDファイル(23.2MB)を利用しました。
- ImageMagickを利用して、最高品質(quality:100)のJPEGファイルを4つ、異なる画像サイズ用意しました。
convert -quality 100 mesoko_1708_1920x1080.psd[0] mesoko_1708_1920x1080.jpg convert -quality 100 -resize 1280x720 mesoko_1708_1920x1080.psd[0] mesoko_1708_1280x720.jpg convert -quality 100 -resize 960x540 mesoko_1708_1920x1080.psd[0] mesoko_1708_960x540.jpg convert -quality 100 -resize 480x270 mesoko_1708_1920x1080.psd[0] mesoko_1708_480x270.jpg
- mesoko_1708_1920x1080.jpg
変換
- guetzliは、guetzliで指定出来る範囲(84〜100)より、84、90、95、99 を指定して変換を実施しました。
- ImageMagickは、30〜99の範囲で変換を実施しました。
guetzli
for file in `ls -1 mesoko_1708*.jpg`; do for quality in 84 90 95 99; do echo "im-${quality}-${file}" time guetzli_linux_x86-64 --quality ${quality} ${file} guetzli-${quality}-${file} sleep 1 done done
ImageMagick
for file in `ls -1 mesoko_1708*.jpg`; do for quality in 30 40 50 60 84 90 95 99; do echo "im-${quality}-${file}" time convert -quality ${quality} ${file} im-${quality}-${file} sleep 1 done done
結果
ファイルサイズ
guetzli
解像度\品質 | オリジナル | 99 | 95 | 90 | 84 |
---|---|---|---|---|---|
1920x1080 | 1588K | 872K | 381K | 247K | 190K |
1280x720 | 798KB | 436K | 210K | 137K | 109K |
960x540 | 514KB | 274K | 137K | 93K | 74K |
480x270 | 193KB | 89K | 45K | 33K | 26K |
ImageMagick
解像度\品質 | オリジナル | 99 | 95 | 90 | 84 | 70 | 60 | 50 | 40 | 30 |
---|---|---|---|---|---|---|---|---|---|---|
1920x1080 | 1588K | 1311KB | 614K | 431K | 345K | 260K | 229K | 210K | 191K | 172K |
1280x720 | 798KB | 680K | 364K | 269K | 222K | 174K | 157K | 145K | 134K | 123K |
960x540 | 514KB | 451K | 258K | 199K | 168K | 137K | 125K | 117K | 110K | 102K |
480x270 | 193KB | 189K | 128K | 110K | 99K | 89K | 85K | 82K | 79K | 77K |
所要時間
- 「time」コマンドで取得した「real」の測定値です
guetzli
解像度\品質 | 84 | 90 | 95 | 99 |
---|---|---|---|---|
1920x1080 | 1m56.109s | 1m55.655s | 2m37.065s | 5m6.957s |
1280x720 | 0m58.797s | 1m2.230s | 1m8.546s | 2m15.623s |
960x540 | 0m31.914s | 0m32.723s | 0m37.941s | 1m12.668s |
480x270 | 0m9.549s | 0m9.797s | 0m11.831s | 0m20.132s |
ImageMagick
解像度\品質 | 84 | 90 | 95 | 99 |
---|---|---|---|---|
1920x1080 | 0m0.092s | 0m0.095s | 0m0.100s | 0m0.126s |
1280x720 | 0m0.046s | 0m0.047s | 0m0.050s | 0m0.062s |
960x540 | 0m0.030s | 0m0.031s | 0m0.034s | 0m0.041s |
480x270 | 0m0.013s | 0m0.014s | 0m0.015s | 0m0.016s |
画質比較
1920x1080 の画像を拡大し、品質の確認を試みました。
オリジナル
- ファイルサイズ: 1588K
quality:90
guetzli (ファイルサイズ: 247K)
ImageMagick (ファイルサイズ: 431K)
quality:84
guetzli(ファイルサイズ: 190K)
ImageMagick(ファイルサイズ: 345K)
quality:40
ImageMagick (ファイルサイズ: 191K)
まとめ
guetzli、ImageMagickで同等の画像品質を指定した場合、ファイルサイズが小さくなる事。 また、ファイルサイズを揃えた場合には、guetzliはノイズが少ない事が確認できました。
AWSではインターネットへのアウトバウンド通信に応じた従量課金が発生し、 東京リージョンのEC2では、1GBの通信毎に$0.140(2017年9月時点)のコストとなります。
仮に、月間10TBのJPEGデータをEC2(ELB)から配信しているWebサイトで、 guetzliを利用して表示品質を落とさず、ファイルサイズを35%抑制する事が出来た場合、 490$($0.14 × 10000 * 0.35)のコスト削減が期待出来る可能性があります。
また、ファイルサイズの抑制はクライアント側の負荷を軽減する効果も期待できます。 特に3G、LTEなどのモバイル回線から利用される場合には、ユーザが負担するパケット代の抑制や 回線が混雑する時間帯の表示速度の改善効果も高いと予想されます。
高品質な画像変換エンジンとして活用できる可能性のある「guetzli」、 ImageMagickと比較して処理時間は大幅に長くなる傾向にありますが、 次回はAWS Lambdaを活用した非同期処理により、 より効果的に活用する方法について紹介させて頂きたいと思います。
- Lambdaでguetzli